import { fileURLToPath, URL } from 'node:url'

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
// import compression from 'vite-plugin-compression'

// https://vitejs.dev/config/
export default defineConfig(({ mode }) => {
  const env = loadEnv(mode, process.cwd())
  const outDir = env.VITE_APP_OUT_DIR || 'dist'
  return {
    base: '',
    plugins: [
      vue(),
      vueJsx()
      // compression({
      //   verbose: true,
      //   disable: false,
      //   threshold: 10240,
      //   algorithm: 'gzip',
      //   ext: '.gz'
      //   // deleteOriginFile: true
      // })
    ],
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      }
    },
    // ******项目构建配置******
    build: {
      outDir,
      // target: 'modules', //设置最终构建的浏览器兼容目标  //es2015(编译成es5) | modules
      // assetsDir: 'assets', // 静态资源得存放路径文件名  assets
      // sourcemap: false, //构建后是否生成 source map 文件
      // brotliSize: false, // 启用/禁用 brotli 压缩大小报告。 禁用该功能可能会提高大型项目的构建性能
      // minify: 'esbuild', // 项目压缩 :boolean | 'terser' | 'esbuild'
      chunkSizeWarningLimit: 1500, //chunk 大小警告的限制（以 kbs 为单位）默认：500
      // cssTarget: 'chrome61' //防止 vite 将 rgba() 颜色转化为 #RGBA 十六进制符号的形式  (要兼容的场景是安卓微信中的 webview 时,它不支持 CSS 中的 #RGBA 十六进制颜色符号)
      rollupOptions: {
        output: {
          chunkFileNames: 'assets/js/[name]-[hash].js',
          entryFileNames: 'assets/js/[name]-[hash].js',
          assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
          manualChunks(id) {
            if (id.includes('node_modules')) {
              return id.toString().match(/\/node_modules\/(?!.pnpm)(?<moduleName>[^/]*)\//)?.groups!.moduleName ?? 'vender'
            }
          }
        }
      },
      // icoPath: '/public/wmmis.ico'
    },
    // css: {preprocessorOptions: {css: {charset: false}}},
    server: {
      proxy: {
        '/api': {
          target: env.VITE_APP_BASE_URL,
          ws: true,
          changeOrigin: true
        },
        '/upload': {
          target: env.VITE_APP_BASE_URL,
          ws: true,
          changeOrigin: true
        },
        '/chat': {
          target: env.VITE_APP_BASE_URL,
          ws: true,
          changeOrigin: true
        }
      }
    },
    define: {
      __VUE_I18N_LEGACY_API__: JSON.stringify(false),
      __VUE_I18N_FULL_INSTALL__: JSON.stringify(false),
      __INTLIFY_PROD_DEVTOOLS__: JSON.stringify(false),
      __NEXT_VERSION__: JSON.stringify(process.env.npm_package_version),
      __NEXT_NAME__: JSON.stringify(process.env.npm_package_name)
    }
  }
})
